net/mwan3: add/remove src_ip from routing table
authorFlorian Eckert <[email protected]>
Fri, 4 May 2018 13:28:54 +0000 (15:28 +0200)
committerFlorian Eckert <[email protected]>
Wed, 16 May 2018 09:19:24 +0000 (11:19 +0200)
Add or remove local_source ip also if mwan3 is stopped or started

Signed-off-by: Florian Eckert <[email protected]>
net/mwan3/files/usr/sbin/mwan3

index 5089630ed4aaf3900b5ff7e8d4ecda797bba5b3b..681f82de3074677490c69d99cd086ba7becaaf8f 100755 (executable)
@@ -118,7 +118,7 @@ status()
 
 start()
 {
-       local enabled
+       local enabled src_ip local_source
 
        config_load mwan3
        config_get_bool enabled globals 'enabled' 0
@@ -127,12 +127,30 @@ start()
                exit 0
        }
 
+       config_get local_source globals local_source 'none'
+       [ "${local_source}" = "none" ] || {
+               src_ip=$(uci_get_state mwan3 globals src_ip)
+               [ "${src_ip}" != "" ] && {
+                       ip route del default via "${src_ip}" dev lo 1>/dev/null 2>&1
+                       ip addr del "${src_ip}/32" dev lo 1>/dev/null 2>&1
+               }
+
+               network_get_ipaddr src_ip "${local_source}"
+               if [ "${src_ip}" = "" ]; then
+                       $LOG warn "Unable to set source ip for own initiated traffic (${local_source})"
+               else
+                       ip addr add "${src_ip}/32" dev lo
+                       ip route add default via "${src_ip}" dev lo
+                       uci_toggle_state mwan3 globals src_ip "${src_ip}"
+               fi
+       }
+
        config_foreach ifup interface
 }
 
 stop()
 {
-       local ipset route rule table IP IPT pid
+       local ipset route rule table IP IPT pid src_ip
 
        for pid in $(pgrep -f "mwan3track"); do
                kill -TERM "$pid" > /dev/null 2>&1
@@ -178,6 +196,12 @@ stop()
 
        mwan3_lock_clean
        rm -rf $MWAN3_STATUS_DIR $MWAN3TRACK_STATUS_DIR
+
+       src_ip=$(uci_get_state mwan3 globals src_ip)
+       [ "${src_ip}" = "" ] || {
+               ip route del default via "${src_ip}" dev lo 1>/dev/null 2>&1
+               ip addr del "${src_ip}/32" dev lo 1>/dev/null 2>&1
+       }
 }
 
 restart() {